﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using EvertonApp.Transporte;

namespace EvertonApp.Data
{
    class TestEventosRepository : IRepository<Evento>
    {

        private static Usuario _usuario = TestNoticiasRepository._usuario;

        private static List<Evento> _eventos = new List<Evento> {
                                                    new Evento {IdHilo = Guid.NewGuid(), Titulo = "Evento1", Descripcion = "Primer Evento", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0, Direccion = "Dinamarca", FechaEvento = DateTime.Now},
                                                    new Evento {IdHilo = Guid.NewGuid(), Titulo = "Evento2", Descripcion = "Segundo Evento", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0, Direccion = "Valparaiso", FechaEvento = DateTime.Now}, 
                                                    new Evento {IdHilo = Guid.NewGuid(), Titulo = "Evento3", Descripcion = "Tercer Evento", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0, Direccion = "Ma House", FechaEvento = DateTime.Now}};


        #region Implementation of IRepository<evento>

        public Evento Insert(Evento entity)
        {
            _eventos.Add(entity);
            entity.IdHilo = Guid.NewGuid();
            return entity;
        }

        public bool Delete(Evento entity)
        {
           return _eventos.Remove(entity);
        }

        public bool Update(Guid id, Evento entity)
        {
            Evento evento = _eventos.FirstOrDefault(o => o.IdHilo == id);
            if (evento != null)
            {
                evento.IdHilo = entity.IdHilo;
                evento.Titulo = entity.Titulo;
                evento.Descripcion = entity.Descripcion;
                evento.CreadoPor = entity.CreadoPor;
                evento.Editado = entity.Editado;
                evento.FechaCreacion = entity.FechaCreacion;
            }else
            {
                return false;
            }
            return true;
        }

        public IQueryable<Evento> SearchFor(Expression<Func<Evento, bool>> predicate)
        {
            var collection = _eventos.AsQueryable();

            return collection.Where(predicate);
        }

        public IQueryable<Evento> GetAll()
        {
            return _eventos.AsQueryable();
        }

        public Evento GetById(Guid id)
        {
            return _eventos.Single(o => o.IdHilo == id);
        }

        #endregion

    }
}
